/**************************************************************************
**
** Copyright (C) 2011 Frank Büttner <frank-buettner@gmx.net>
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program.  If not, see <http://www.gnu.org/licenses/>.
**
**************************************************************************/

#include <QtCore>
#include <QtGui>

#include "Hauptformular.h"
#include "Fortschritsanzeigeformular.h"
#include "Benutzerfuehrung.h"
#include "Infoformular.h"
#include "Modulbasis.h"
#include "Modulliste.h"

Hauptformular::Hauptformular(QWidget *eltern) : QMainWindow(eltern)
{
    setupUi(this);
    //Fenster in die Mitte
    QRect Rechteck = this->geometry();
    Rechteck.moveCenter(QApplication::desktop()->availableGeometry().center());
    this->setGeometry(Rechteck);

    K_Liste=new Modulliste(this);
    connect(K_Liste,SIGNAL(Fehler(QString)),this,SLOT(Warnung(QString)));
    QTimer::singleShot(0,this,SLOT(los()));
}
void Hauptformular::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type())
    {
	case QEvent::LanguageChange:
					retranslateUi(this);
					break;
	default:
					break;
    }
}
void Hauptformular::los()
{
    ModuleLaden();
    //Wenn keine Datei übergeben worden ist, laden wir den Assistenten
    if (qApp->arguments().size()<2)
	on_AktionAssistentNeuStarten_triggered();
}
void Hauptformular::on_AktionAssistentNeuStarten_triggered()
{
    Benutzerfuehrung *Assistent;
    QWidget	    *Inhalt;
    QWidget	    *InhaltLeer;
    QVBoxLayout	    *Kasten;
    InhaltLeer=new QWidget(this);
    Inhalt=new QWidget(this);
    Kasten=new QVBoxLayout(Inhalt);
    Fortschritt->setWidget(InhaltLeer);
    Assistent=new Benutzerfuehrung(this,K_Liste);
    if(Assistent->exec()==QDialog::Accepted)
    {
	/*
	    Assistent wurde vollständig durchlaufen
	    Jetzt hat man: Steuerdatei(Woraus sich das passende Modul ergibt),Zielverzeichnis
	*/
	Fortschritsanzeigeformular *Anzeige;

	//zum testen
	static int Y=4;
	for (int x=0;x<2*Y;x++)
	{
	    Anzeige=new Fortschritsanzeigeformular(this);
	    Anzeige->DateinamenSetzen(QString("%1").arg(x));
	    Anzeige->DateigroeseSetzen(100);
	    Kasten->addWidget(Anzeige);
	}
	Y--;
	//ende
	Fortschritt->setWidget(Inhalt);
    }
}
void Hauptformular::on_AktionUeberQt_triggered()
{
    qApp->aboutQt();
}
void Hauptformular::on_AktionUeberQAbhohler_triggered()
{
    static Infoformular *Info;
    if(!Info)
	Info=new Infoformular(this,K_Liste);
    Info->exec();
}
void Hauptformular::ModuleLaden()
{
    QDir Pluginpfad=QDir(qApp->applicationDirPath());
    Q_FOREACH(QString Dateiname , Pluginpfad.entryList(QDir::Files))
    {
	 QPluginLoader Starter(Pluginpfad.absoluteFilePath(Dateiname));
	 QObject *Plugin=Starter.instance();
	 if(Plugin)
	 {
	     //ist es eines unserer Module?
	     Modulbasis *Modul=qobject_cast<Modulbasis *>(Plugin);
	     if(Modul)
	     {
		 //Testen ob die API version zu neu ist
		 if(Modul->APIVersion()<=MODULAPIVERSION)
		    K_Liste->neuesModul(Modul);
	     }
	 }
    }
    if (K_Liste->AnzahlDerModule()==0)
    {
	Fehler(tr("Es wurden keine Module gefunden."));
	qApp->exit(-1);
    }
}
void Hauptformular::Warnung(const QString &meldung)
{
    QMessageBox::warning(this,tr("Warnung"),meldung);
}

void Hauptformular::Fehler(const QString &meldung)
{
    QMessageBox::critical(this,tr("Fehler"),meldung);
}
